package com.me.common.util;

import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

/**
 * 自定义的 字符串工具类
 *
 * @author ME
 * @date   2019/10/23
 */
public class StringUtils extends org.apache.commons.lang3.StringUtils {

    /**
     * 文本串中包含特殊空格，替换之
     * @param originalStr
     * @return
     */
    public static String replaceSpace(String originalStr) {
        // \u00A0：表示不换行空格（ ）
        // \u3000：表示全角空格（　）
        // \u0020：表示普通空格
        return originalStr.replaceAll("[\\u00A0\\u3000]", " ");
    }

    /**
     * 转义换行符，把 `换行符` 转成字符串形式的 `\n`（压缩成单行）
     * @param originalStr
     * @return
     */
    public static String escapeNewLine(String originalStr) {
        return originalStr.replace("\n", "\\n")
                .replace("\r", "\\r");
    }

    /**
     * 计算给定字符串的字节长度
     * @param str
     * @return
     */
    public static int getBytesLength(String str) {
        return str.getBytes().length;
    }

    /**
     * 使用指定字符集计算给定字符串的字节长度, 如: UTF-8中文为3字节
     * @param str
     * @param charsetName
     * @return
     * @throws UnsupportedEncodingException
     */
    public static int getBytesLength(String str, String charsetName) throws UnsupportedEncodingException {
        return str.getBytes(charsetName).length;
    }

    /**
     * 提供一个通用方法，根据字节数截取字符
     *
     * @param str   原字符串
     * @param count 字节数
     * @return
     */
    public static String subByNumberOfBytes(String str, int count) {
        char[] chars = str.toCharArray();
        int temp = 0;
        for (int i = 0; i < chars.length; i++) {
            int length = String.valueOf(chars[i]).getBytes(StandardCharsets.UTF_8).length;
            if (temp + length > count) {
                System.out.println(i);
                return str.substring(0, i);
            }
            temp += length;
        }

        return "";
    }

    /** 输出红色下划线 */
    public static String redStr1(String str) {
        return "\33[31;4m" + str + "\33[0m";
    }

    /** 输出红色下划线 */
    public static String redStr2(String str) {
        return "\u001B[31;4m" + str + "\u001B[0m";
    }

}
